英文字母信息熵与冗余度计算Python实现 – OmegaXYZ | 您所在的位置:网站首页 › 熵 计算复杂度 › 英文字母信息熵与冗余度计算Python实现 – OmegaXYZ |
26个英文字母在平均出现时的信息熵是4.7BIT,而去掉冗余度后的英文字母的信息熵是4.03BIT。 公式: H(信息熵) = -∑ Pi log2(Pi); Pi:为每个字母在信息中出现的概率; 计算公式并不复杂. 取以2为底的对数的道理也很简单,因为如果: 2n = X 的话,那么logX = n; 所以可以看出所谓信息熵就二进制的字符集在去掉冗余度后的二进制编码位数.冗余度是通过统计每个字符出现概率获得的。 各个字母英语中出现的频率 字母 英语中出现的频率 a 8.167% b 1.492% c 2.782% d 4.253% e 12.702% f 2.228% g 2.015% h 6.094% i 6.966% j 0.153% k 0.772% l 4.025% m 2.406% n 6.749% o 7.507% p 1.929% q 0.095% r 5.987% s 6.327% t 9.056% u 2.758% v 0.978% w 2.360% x 0.150% y 1.974% z 0.074%python代码实现: Python 123456789101112131415161718192021222324252627282930 import math def calEntropy(string): h = 0.0 sumt = 0 letter = [0] * 26 string = string.lower() for i in range(len(string)): if string[i].isalpha(): letter[ord(string[i]) - ord('a')] += 1 sumt += 1 print('\n', letter) for i in range(26): p = 1.0 * letter[i] / sumt if p > 0: h += -(p * math.log(p, 2)) return h test = input("输入一个英文句子:")print('\n熵为:', calEntropy(test)) '''letter = [8167,1492,2782,4253,12702,2228,2015,6094,6966,153,772,4025,2406,6749,7507,1929,95,5987,6327,9056,2758,978,2360,150,1974,74]h = 0for i in range(26): h += -(letter[i]/sum(letter)*math.log(letter[i]/sum(letter),2))print(h)'''结果 |
CopyRight 2018-2019 实验室设备网 版权所有 |